package srcInterviewPrep.interviewPrepTests;

import static org.junit.Assert.*;

import java.util.ArrayList;
import java.util.List;

import org.hamcrest.core.Is;
import org.junit.Test;

import srcInterviewPrep.BipartiteChecker;
import srcInterviewPrep.Vertex;

public class BipartiteCheckerTest {

    @Test
    public void testIsGraphBipartite() 
    {
        // Arrange:
        Vertex v1 = new Vertex(1, 0, new ArrayList<Vertex>());
        Vertex v2 = new Vertex(2, 0, new ArrayList<Vertex>());
        Vertex v3 = new Vertex(3, 0, new ArrayList<Vertex>());
        Vertex v4 = new Vertex(4, 0, new ArrayList<Vertex>());
        Vertex v5 = new Vertex(5, 0, new ArrayList<Vertex>());
        Vertex v6 = new Vertex(6, 0, new ArrayList<Vertex>());
        Vertex v7 = new Vertex(7, 0, new ArrayList<Vertex>());
        Vertex v8 = new Vertex(8, 0, new ArrayList<Vertex>());
        Vertex v9 = new Vertex(9, 0, new ArrayList<Vertex>());
        Vertex v10 = new Vertex(10, 0, new ArrayList<Vertex>());

        v1.Neighbors().add(v6);
        v6.Neighbors().add(v1);

        v1.Neighbors().add(v7);
        v7.Neighbors().add(v1);

        v2.Neighbors().add(v3);
        v3.Neighbors().add(v2);

        v2.Neighbors().add(v4);
        v4.Neighbors().add(v2);

        v4.Neighbors().add(v5);
        v5.Neighbors().add(v4);

        v3.Neighbors().add(v8);
        v8.Neighbors().add(v3);

        v8.Neighbors().add(v9);
        v9.Neighbors().add(v8);

        v8.Neighbors().add(v10);
        v10.Neighbors().add(v8);

        v3.Neighbors().add(v5);
        v5.Neighbors().add(v3);

        v3.Neighbors().add(v4);
        v4.Neighbors().add(v3);

        List<Vertex> vertices = new ArrayList<Vertex>();
        vertices.add(v1);
        vertices.add(v2);
        vertices.add(v3);
        vertices.add(v4);
        vertices.add(v5);
        vertices.add(v6);
        vertices.add(v7);
        vertices.add(v8);
        vertices.add(v9);
        vertices.add(v10);
        
        // Act:
        boolean value = BipartiteChecker.IsGraphBipartite(vertices);
        
        // Assert:
        assertEquals(false, value);
        
    }

}
